#include <stdio.h>
#include <stdlib.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int x[15] = {0};
int sum, N;
int PD(int k)
{
	for (int i = 1; i < k; i++)
	{
		if (abs(k - i) == abs(x[k] - x[i]) || x[k] == x[i]) // 1.判断行列之差不相等即判断不在同一对角线 2.判断不在同一列
		{
			return 0;
		}
	}
	return 1;
}
int check(int a)
{
	if (a > N)
		sum++;
	else
		return 0;
	return 1;
}
void DFS(int a)
{
	int i, j;
	if (check(a))
		return;
	else
	{
		for (j = 1; j <= N; j++)
		{
			x[a] = j;  // 第a个皇后的列数
			if (PD(a)) // 判断能否放到这一步
			{
				DFS(a + 1); // 能的话进行下一个皇后的放置
			}
			else
				continue; // 不能就下一列
		}
	}
}
int main(int argc, char *argv[])
{
	int i, k, a;
	scanf("%d", &N); // 有N个皇后
	DFS(1);			 // 每次都从第一个皇后开始
	printf("%d", sum);

	return 0;
}
